/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package classes;

import java.sql.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author User
 */
public class Conecta {

    public Conector conect = new Conector();
    public PreparedStatement prest = null;
    public String sql = null;
    public ResultSet rs = null;

    public Conecta() {
    }

    public void cadastraProduto(Produto prod) {
        try {
            if (!isProdutoRepetido(prod)) {
                sql = "INSERT INTO produtos (produto,barcode,quant,compra,venda,categoria) VALUES (?,?,?,?,?,?)";
                prest = conect.conn.prepareStatement(sql);
                prest.setString(1, prod.getNomeProduto());
                prest.setString(2, prod.getBarCode());
                prest.setInt(3, prod.getQuantidade());
                prest.setFloat(4, prod.getVenda());
                prest.setFloat(5, prod.getCompra());
                prest.setString(6, prod.getCategoria());
                prest.executeUpdate();
                prest.close();
            } else {
                JOptionPane.showMessageDialog(null, "Já cadastrado");
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao cadastrar");
        }

    }

    public ArrayList<Produto> listaProduto(String busca, int tipo) {
        ArrayList<Produto> produtos = new ArrayList<Produto>();
        try {
            switch (tipo) {
                case 1:
                    sql = "select * from produtos where produto " + "LIKE ?";
                    prest = conect.conn.prepareStatement(sql);
                    break;
                case 2:
                    sql = "select * from produtos where quant " + "LIKE ?";
                    prest = conect.conn.prepareStatement(sql);
                    break;
                case 3:
                    sql = "select * from produtos where categoria " + "LIKE ?";
                    prest = conect.conn.prepareStatement(sql);
                    break;
                case 4:
                    sql = "select * from produtos where barCode " + "LIKE ?";
                    prest = conect.conn.prepareStatement(sql);
                    break;
                default:
            }
            prest.setString(1, busca);
            rs = prest.executeQuery();
            while (rs.next()) {
                Produto prod = new Produto();
                prod.setId(rs.getInt("ID"));
                prod.setNomeProduto(rs.getString("produto"));
                prod.setBarCode(rs.getString("barcode"));
                prod.setQuantidade(rs.getInt("quant"));
                prod.setCategoria(rs.getString("categoria"));
                prod.setCompra(rs.getFloat("compra"));
                prod.setVenda(rs.getFloat("venda"));
                produtos.add(prod);
            }
            rs.close();
            prest.close();
        } catch (SQLException ex) {
            Logger.getLogger(Conecta.class.getName()).log(Level.SEVERE, null, ex);
        }

        return produtos;
    }

    public ArrayList<Produto> listaTodosProdutos() {
        ArrayList<Produto> produtos = new ArrayList<Produto>();
        try {
            sql = "select * from produtos";
            prest = conect.conn.prepareStatement(sql);
            rs = prest.executeQuery();
            while (rs.next()) {
                Produto prod = new Produto();
                prod.setId(rs.getInt("ID"));
                prod.setNomeProduto(rs.getString("produto"));
                prod.setBarCode(rs.getString("barcode"));
                prod.setQuantidade(rs.getInt("quant"));
                prod.setCategoria(rs.getString("categoria"));
                prod.setCompra(rs.getFloat("compra"));
                prod.setVenda(rs.getFloat("venda"));
                produtos.add(prod);
            }
            rs.close();
            prest.close();
        } catch (SQLException ex) {
            Logger.getLogger(Conecta.class.getName()).log(Level.SEVERE, null, ex);
        }
        return produtos;
    }

    public boolean isProdutoRepetido(Produto prod) throws SQLException {
        boolean cond = false;
        sql = "select * from produtos where barCode = ? or produto = ?";
        prest = conect.conn.prepareStatement(sql);
        prest.setString(1, prod.getBarCode());
        prest.setString(2, prod.getNomeProduto());
        rs = prest.executeQuery();
        if (rs.next()) {
            if (prod.getBarCode().equals(rs.getString("barCode")) == true) {
                cond = true;
            }
        }
        return cond;
    }

    public void alteraProduto(Produto prod) {
        try {
            sql = "UPDATE produtos set produto =?, barcode = ?, quant = ?,compra = ?,venda = ?,categoria = ? where id = ?";
            prest = conect.conn.prepareStatement(sql);
            prest.setString(1, prod.getNomeProduto());
            prest.setString(2, prod.getBarCode());
            prest.setInt(3, prod.getQuantidade());
            prest.setFloat(5, prod.getVenda());
            prest.setFloat(4, prod.getCompra());
            prest.setString(6, prod.getCategoria());
            prest.setInt(7, prod.getId());
            prest.executeUpdate();
            rs.close();
            prest.close();
        } catch (SQLException ex) {
            Logger.getLogger(Conecta.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public ArrayList<Categoria> listaTodasCategorias() {
        ArrayList<Categoria> listaCategoria = new ArrayList<Categoria>();
        sql = "select * from categoria";
        try {
            prest = conect.conn.prepareCall(sql);
            rs = prest.executeQuery();
            while (rs.next()) {
                Categoria categoria = new Categoria();
                categoria.setId(rs.getInt("id"));
                categoria.setCategoria(rs.getString("categoria"));
                listaCategoria.add(categoria);
            }
            return listaCategoria;
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e);
        }


        return listaCategoria;
    }

    public void insereCategoria(Categoria categoria) {
        try {
            if (categoriaCadastrada(categoria) != true) {
                sql = "INSERT INTO categoria (categoria) VALUES (?)";
                prest = conect.conn.prepareStatement(sql);
                prest.setString(1, categoria.getCategoria());
                prest.executeUpdate();
                prest.close();
            } else {
                JOptionPane.showMessageDialog(null, "Categoria já cadastrada");
            }
        } catch (SQLException e) {
            e.printStackTrace();

        }
    }

    public void removeCategoria(Categoria categoria) {
    }

    public void alteraCategoria(Categoria categoria) {
    }

    public boolean categoriaCadastrada(Categoria categoria) {
        boolean cond = false;
        try {
            sql = "select * from categoria where categoria = ?";
            prest = conect.conn.prepareStatement(sql);
            prest.setString(1, categoria.getCategoria());
            rs = prest.executeQuery();
            if (rs.next()) {
                cond = true;
            }
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "Erro ao consultar");
        }
        return cond;
    }
}
